package tp1POO.Modelo;

import java.io.Serializable;
import java.util.List;
import java.util.Vector;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class Veiculo extends ObjetoPOO implements Serializable {

	public Veiculo() {
		
	}
	/**
	 * Construtor padrão
	 * @param placa do veiculo (String)
	 * @see Veiculo#Veiculo(String, String, String)
	 */
	public Veiculo(String placa) {
		this.locacoes = new Vector<Locacao>();
		this.placa = placa;
	}

	/**
	 * Construtor 2
	 * @param placa do veiculo (String)
	 * @see Veiculo#Veiculo(String)
	 */
	public Veiculo(String placa, String marca, String modelo) {
		this.locacoes = new Vector<Locacao>();
		this.placa = placa;
		this.marca = marca;
		this.modelo = modelo;
	}

	/**
	 * Obtem a placa do veiculo
	 * @return placa do veículo (String)
	 * @see Veiculo#setPlaca(String)
	 */
	public String getPlaca() {
		return placa;
	}

	/**
	 * Ajusta a placa do veiculo
	 * @param placa do veiculo (String)
	 * @see Veiculo#getPlaca()
	 */
	public void setPlaca(String placa) {
		this.placa = placa;
	}

	/**
	 * Obtem a marca do veiculo
	 * @return marca do veiculo (String)
	 * @see Veiculo#setMarca(String)
	 */
	public String getMarca() {
		return marca;
	}

	/**
	 * Ajusta a marca do veiculo
	 * @param marca do veiculo (String)
	 * @see Veiculo#getMarca()
	 */
	public void setMarca(String marca) {
		this.marca = marca;
	}

	/**
	 * Obtem o modelo do veiculo
	 * 
	 * @see Veiculo#setModelo(String)
	 */
	public String getModelo() {
		return modelo;
	}

	/**
	 * Ajusta o modelo do veiculo
	 * 
	 * @see Veiculo#getModelo()
	 */
	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	/**
	 * Obtem a cor do veiculo
	 * 
	 * @see Veiculo#setCor(String)
	 */
	public String getCor() {
		return cor;
	}

	/**
	 * Ajusta a cor do veiculo
	 * 
	 * @see Veiculo#getCor()
	 */
	public void setCor(String cor) {
		this.cor = cor;
	}

	/**
	 * Obtem os opcionais do veiculo
	 * 
	 * @see Veiculo#setOpcionais(String)
	 */
	public String getOpcionais() {
		return opcionais;
	}

	/**
	 * Ajusta os opcionais do veiculo
	 * 
	 * @see Veiculo#getOpcionais()
	 */
	public void setOpcionais(String opcionais) {
		this.opcionais = opcionais;
	}

	/**
	 * Obtem as observacoes sobre o veiculo
	 * 
	 * @see Veiculo#setObservacoes(String)
	 */
	public String getObservacoes() {
		return observacoes;
	}

	/**
	 * Ajusta as observacoes sobre o veiculo
	 * 
	 * @see Veiculo#getObservacoes()
	 */
	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	/**
	 * Obtem o todas locacoes no qual o veiculo tenha participado
	 * 
	 * @see Veiculo#addLocacao(Locacao)
	 */
	public List<Locacao> getLocacoes() {
		return locacoes;
	}

	/**
	 * Adiciona uma locacao ao veiculo
	 * 
	 * @see Veiculo#getLocacoes()
	 */
	public void addLocacao(Locacao parLocacao) {
		if (parLocacao != null)
			this.locacoes.add(parLocacao);
	}

	/**
	 * Obtem a categoria do veiculo (tipo)
	 * 
	 * @see Veiculo#setTipoVeiculo(Tipo)
	 */
	public Tipo getTipoVeiculo() {
		return tipoVeiculo;
	}

	/**
	 * Ajusta a categoria do veiculo (tipo)
	 * 
	 * @see Veiculo#getTipoVeiculo()
	 */
	public void setTipoVeiculo(Tipo tipoVeiculo) {
		this.tipoVeiculo = tipoVeiculo;
	}

	/**
	 * Obtem o identificador do veiculo - placa
	 */
	public String getIdentifier() {
		return getPlaca();
	}

	public String toString() {
		return getIdentifier();
	}

	// Variaveis
	@Id
	@Column(nullable=false, length=8)
	private String placa;
	@Column(length=50)
	private String marca;
	@Column(nullable=false, length=50)
	private String modelo;
	@Column(length=20)
	private String cor;
	private String opcionais;
	private String observacoes;
	@OneToMany(mappedBy="veiculo")
	@Column(nullable=false)
	private List<Locacao> locacoes;
	@OneToOne
	private Tipo tipoVeiculo;
}